#ifndef __MOTOR_H
#define __MOTOR_H

#include <Arduino.h>
#include <SimpleFOC.h>
#include <lvgl.h>

#define EN_12V 9
#define MC1 47
#define MC2 48
#define MC3 45
#define MC_EN 21

#define SDA 1
#define SCL 2

extern int motor_mode[];

typedef struct {
    bool is_outbound;
    int32_t position;
    float angle_offset;
}MotorStatusInfo;

typedef enum
{
    MOTOR_NAVIGATE_MODE,   // 导航模式
    MOTOR_USE_ARC,   //240度圆弧用
    MOTOR_SUPER_DIAL, 
    MOTOR_UNBOUND_COARSE_DETENTS, // Coarse values\nStrong detents\n unbound
    MOTOR_BOUND_0_12_NO_DETENTS,
    MOTOR_BOUND_LCD_BK_BRIGHTNESS,
    MOTOR_BOUND_LCD_BK_TIMEOUT,
    MOTOR_COARSE_DETENTS,       // Coarse values\nStrong detents
    MOTOR_FINE_NO_DETENTS,     // Fine values\nNo detents
    MOTOR_ON_OFF_STRONG_DETENTS,             // "On/off\nStrong detent"
    MOTOR_MAX_MODES, //
} MOTOR_RUNNING_MODE_E;


struct XKnobConfig {
    // 可以运动的个数
    int32_t num_positions;        
    // 位置
    int32_t position;             
    // 每一步的度数  弧度
    float position_width_radians; 
    // 正常旋转时的制动强度
    float detent_strength_unit;  
    // 超出界限后的制动强度
    float endstop_strength_unit;  
    // 每一步所代表的值
    float snap_point; 
};

int get_motor_position(void);
float get_motor_position_width_radians(void);
void update_motor_mode(int mode , int init_position);
bool is_encoder_enabled(void);
void encoder_disable(void);
void encoder_enable(void);
bool encoder_is_pushed(void);

void motor_init(void *pvParameters);

/////////////////////////////////////////////////////////////////


#endif